package org.lcc.Service;

import org.lcc.model.VO.NotificationVO;
import org.lcc.model.dto.NotificationDto;

import java.util.List;
import java.util.Map;

public interface NotificationService {
    
    /**
     * 发送通知
     * @param notificationDto 通知信息
     * @param senderId 发送者ID
     * @return 发送结果
     */
    Map<String, Object> sendNotification(NotificationDto notificationDto, String senderId);
    
    /**
     * 获取所有通知（管理员使用）
     * @param pageNum 页码
     * @param pageSize 每页条数
     * @return 通知列表和总数
     */
    Map<String, Object> getAllNotifications(int pageNum, int pageSize);
    
    /**
     * 获取学生的通知列表
     * @param studentId 学生ID
     * @param pageNum 页码
     * @param pageSize 每页条数
     * @return 通知列表和总数
     */
    Map<String, Object> getStudentNotifications(String studentId, int pageNum, int pageSize);
    
    /**
     * 获取教师发送的通知列表
     * @param teacherId 教师ID
     * @param pageNum 页码
     * @param pageSize 每页条数
     * @return 通知列表和总数
     */
    Map<String, Object> getTeacherNotifications(String teacherId, int pageNum, int pageSize);
    
    /**
     * 获取通知详情
     * @param notificationId 通知ID
     * @param studentId 学生ID
     * @return 通知详情
     */
    NotificationVO getNotificationDetail(Integer notificationId, String studentId);
    
    /**
     * 标记通知为已读
     * @param notificationId 通知ID
     * @param studentId 学生ID
     * @return 是否成功
     */
    boolean markAsRead(Integer notificationId, String studentId);
    
    /**
     * 获取学生未读通知数量
     * @param studentId 学生ID
     * @return 未读通知数量
     */
    int countUnreadNotifications(String studentId);
    
    /**
     * 删除通知
     * @param notificationId 通知ID
     * @return 是否成功
     */
    boolean deleteNotification(Integer notificationId);
} 